home *** CD-ROM | disk | FTP | other *** search
/ Spidla DivX / DivX.bin / CatDV Pro 3.0.8 / lib / parser.jar / com / sun / xml / util / MessageCatalog.class (.txt) next >
Encoding:
Java Class File  |  2000-02-23  |  5.2 KB  |  263 lines

  1. package com.sun.xml.util;
  2.  
  3. import java.io.InputStream;
  4. import java.text.FieldPosition;
  5. import java.text.MessageFormat;
  6. import java.util.Date;
  7. import java.util.Hashtable;
  8. import java.util.Locale;
  9. import java.util.MissingResourceException;
  10. import java.util.ResourceBundle;
  11.  
  12. public abstract class MessageCatalog {
  13.    private String bundleName;
  14.    private Hashtable cache;
  15.  
  16.    protected MessageCatalog(Class var1) {
  17.       this(var1, "Messages");
  18.    }
  19.  
  20.    private MessageCatalog(Class var1, String var2) {
  21.       this.cache = new Hashtable(5);
  22.       this.bundleName = var1.getName();
  23.       int var3 = this.bundleName.lastIndexOf(46);
  24.       if (var3 == -1) {
  25.          this.bundleName = "";
  26.       } else {
  27.          this.bundleName = this.bundleName.substring(0, var3) + ".";
  28.       }
  29.  
  30.       this.bundleName = this.bundleName + "resources." + var2;
  31.    }
  32.  
  33.    private String[] canonicalize(String[] var1) {
  34.       boolean var2 = false;
  35.       int var3 = 0;
  36.       if (var1 == null) {
  37.          return var1;
  38.       } else {
  39.          for(int var4 = 0; var4 < var1.length; ++var4) {
  40.             String var5 = var1[var4];
  41.             int var6 = var5.length();
  42.             if (var6 != 2 && var6 != 5) {
  43.                if (!var2) {
  44.                   var1 = (String[])var1.clone();
  45.                   var2 = true;
  46.                }
  47.  
  48.                var1[var4] = null;
  49.                ++var3;
  50.             } else if (var6 == 2) {
  51.                var5 = var5.toLowerCase();
  52.                if (var5 != var1[var4]) {
  53.                   if (!var2) {
  54.                      var1 = (String[])var1.clone();
  55.                      var2 = true;
  56.                   }
  57.  
  58.                   var1[var4] = var5;
  59.                }
  60.             } else {
  61.                char[] var7 = new char[]{Character.toLowerCase(var5.charAt(0)), Character.toLowerCase(var5.charAt(1)), '_', Character.toUpperCase(var5.charAt(3)), Character.toUpperCase(var5.charAt(4))};
  62.                if (!var2) {
  63.                   var1 = (String[])var1.clone();
  64.                   var2 = true;
  65.                }
  66.  
  67.                var1[var4] = new String(var7);
  68.             }
  69.          }
  70.  
  71.          if (var3 != 0) {
  72.             String[] var10 = new String[var1.length - var3];
  73.             int var11 = 0;
  74.  
  75.             for(int var8 = 0; var11 < var10.length; ++var11) {
  76.                while(var1[var11 + var8] == null) {
  77.                   ++var8;
  78.                }
  79.  
  80.                var10[var11] = var1[var11 + var8];
  81.             }
  82.  
  83.             var1 = var10;
  84.          }
  85.  
  86.          return var1;
  87.       }
  88.    }
  89.  
  90.    public Locale chooseLocale(String[] var1) {
  91.       if ((var1 = this.canonicalize(var1)) != null) {
  92.          for(int var2 = 0; var2 < var1.length; ++var2) {
  93.             if (this.isLocaleSupported(var1[var2])) {
  94.                return this.getLocale(var1[var2]);
  95.             }
  96.          }
  97.       }
  98.  
  99.       return null;
  100.    }
  101.  
  102.    private Locale getLocale(String var1) {
  103.       int var4 = var1.indexOf(95);
  104.       String var2;
  105.       String var3;
  106.       if (var4 == -1) {
  107.          if (var1.equals("de")) {
  108.             return Locale.GERMAN;
  109.          }
  110.  
  111.          if (var1.equals("en")) {
  112.             return Locale.ENGLISH;
  113.          }
  114.  
  115.          if (var1.equals("fr")) {
  116.             return Locale.FRENCH;
  117.          }
  118.  
  119.          if (var1.equals("it")) {
  120.             return Locale.ITALIAN;
  121.          }
  122.  
  123.          if (var1.equals("ja")) {
  124.             return Locale.JAPANESE;
  125.          }
  126.  
  127.          if (var1.equals("ko")) {
  128.             return Locale.KOREAN;
  129.          }
  130.  
  131.          if (var1.equals("zh")) {
  132.             return Locale.CHINESE;
  133.          }
  134.  
  135.          var2 = var1;
  136.          var3 = "";
  137.       } else {
  138.          if (var1.equals("zh_CN")) {
  139.             return Locale.SIMPLIFIED_CHINESE;
  140.          }
  141.  
  142.          if (var1.equals("zh_TW")) {
  143.             return Locale.TRADITIONAL_CHINESE;
  144.          }
  145.  
  146.          var2 = var1.substring(0, var4);
  147.          var3 = var1.substring(var4 + 1);
  148.       }
  149.  
  150.       return new Locale(var2, var3);
  151.    }
  152.  
  153.    public String getMessage(Locale var1, String var2) {
  154.       if (var1 == null) {
  155.          var1 = Locale.getDefault();
  156.       }
  157.  
  158.       try {
  159.          ResourceBundle var3 = ResourceBundle.getBundle(this.bundleName, var1);
  160.          return var3.getString(var2);
  161.       } catch (MissingResourceException var4) {
  162.          return this.packagePrefix(var2);
  163.       }
  164.    }
  165.  
  166.    public String getMessage(Locale var1, String var2, Object[] var3) {
  167.       if (var3 == null) {
  168.          return this.getMessage(var1, var2);
  169.       } else {
  170.          for(int var4 = 0; var4 < var3.length; ++var4) {
  171.             if (!(var3[var4] instanceof String) && !(var3[var4] instanceof Number) && !(var3[var4] instanceof Date)) {
  172.                if (var3[var4] == null) {
  173.                   var3[var4] = "(null)";
  174.                } else {
  175.                   var3[var4] = var3[var4].toString();
  176.                }
  177.             }
  178.          }
  179.  
  180.          if (var1 == null) {
  181.             var1 = Locale.getDefault();
  182.          }
  183.  
  184.          MessageFormat var6;
  185.          try {
  186.             ResourceBundle var5 = ResourceBundle.getBundle(this.bundleName, var1);
  187.             var6 = new MessageFormat(var5.getString(var2));
  188.          } catch (MissingResourceException var9) {
  189.             String var7 = this.packagePrefix(var2);
  190.  
  191.             for(int var8 = 0; var8 < var3.length; ++var8) {
  192.                var7 = var7 + ' ';
  193.                var7 = var7 + var3[var8];
  194.             }
  195.  
  196.             return var7;
  197.          }
  198.  
  199.          var6.setLocale(var1);
  200.          StringBuffer var11 = new StringBuffer();
  201.          var11 = var6.format(var3, var11, new FieldPosition(0));
  202.          return var11.toString();
  203.       }
  204.    }
  205.  
  206.    public boolean isLocaleSupported(String var1) {
  207.       Boolean var2 = (Boolean)this.cache.get(var1);
  208.       if (var2 != null) {
  209.          return var2;
  210.       } else {
  211.          ClassLoader var3 = null;
  212.  
  213.          while(true) {
  214.             String var4 = this.bundleName + "_" + var1;
  215.  
  216.             try {
  217.                Class.forName(var4);
  218.                this.cache.put(var1, Boolean.TRUE);
  219.                return true;
  220.             } catch (Exception var7) {
  221.                if (var3 == null) {
  222.                   var3 = this.getClass().getClassLoader();
  223.                }
  224.  
  225.                var4 = var4.replace('.', '/');
  226.                var4 = var4 + ".properties";
  227.                InputStream var5;
  228.                if (var3 == null) {
  229.                   var5 = ClassLoader.getSystemResourceAsStream(var4);
  230.                } else {
  231.                   var5 = var3.getResourceAsStream(var4);
  232.                }
  233.  
  234.                if (var5 != null) {
  235.                   this.cache.put(var1, Boolean.TRUE);
  236.                   return true;
  237.                }
  238.  
  239.                int var6 = var1.indexOf(95);
  240.                if (var6 <= 0) {
  241.                   this.cache.put(var1, Boolean.FALSE);
  242.                   return false;
  243.                }
  244.  
  245.                var1 = var1.substring(0, var6);
  246.             }
  247.          }
  248.       }
  249.    }
  250.  
  251.    private String packagePrefix(String var1) {
  252.       String var2 = this.getClass().getName();
  253.       int var3 = var2.lastIndexOf(46);
  254.       if (var3 == -1) {
  255.          var2 = "";
  256.       } else {
  257.          var2 = var2.substring(0, var3);
  258.       }
  259.  
  260.       return var2 + '/' + var1;
  261.    }
  262. }
  263.